// 信号
#ifndef _SEM_HPP // 防止重复包含头文件
// 如果未定义_SEM_HPP，则执行下面的代码
#define _SEM_HPP

#include <iostream>
#include <semaphore.h>

class Sem
{
public:
    Sem(int value) // 构造
    {
        sem_init(&_sem, 0, value);
    }

    void p() // 对信号进行 p操作（等待操作
    {
        sem_wait(&_sem);
    }

    void v() // 对信号执行 v操作（释放资源
    {
        sem_post(&_sem);
    }
    
    ~Sem()  // 析构: 销毁信号
    {
        sem_destroy(&_sem);
    }

private:
    sem_t _sem;
};

#endif